#include <head.h>
int main(int argc, char const *argv[])
{
  DIR *dir = opendir("../../第一天/我的作业");
  DIR_OPEN_ERR(dir);
  struct dirent *entry;
  while ((entry = readdir(dir)) != NULL)
  {
    if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
    {
      continue;
    }

    struct stat file_stat;
    stat(entry->d_name, &file_stat);
    struct passwd *U_name; // 用户的结构体
    struct group *g_name;  // 用户组的结构体
    // 文件类型

    switch (file_stat.st_mode & __S_IFMT)
    {
    case __S_IFREG: // 普通文件
      printf("-");
      break;
    case __S_IFDIR: // 目录文件
      printf("d");
      break;
    case __S_IFCHR: // 字符文件
      printf("c");
      break;
    case __S_IFBLK: // 块设备
      printf("b");
      break;
    case __S_IFIFO: // 管道文件
      printf("p");
      break;
    case __S_IFLNK: // 链接文件
      printf("l");
      break;
    case __S_IFSOCK: // 套接字文件
      printf("s");
    default:
      break;
    }
    // 文件权限
    printf((file_stat.st_mode & S_IRUSR) ? "r" : "-");
    printf((file_stat.st_mode & S_IWUSR) ? "w" : "-");
    printf((file_stat.st_mode & S_IXUSR) ? "x" : "-");
    printf((file_stat.st_mode & S_IRGRP) ? "r" : "-");
    printf((file_stat.st_mode & S_IWGRP) ? "w" : "-");
    printf((file_stat.st_mode & S_IXGRP) ? "x" : "-");
    printf((file_stat.st_mode & S_IROTH) ? "r" : "-");
    printf((file_stat.st_mode & S_IWOTH) ? "w" : "-");
    printf((file_stat.st_mode & S_IXOTH) ? "x" : "-");

    // 链接数
    printf(" %d ", (int)file_stat.st_nlink);
    // 所有者用户ID
    // pritnf("%d ",file_stat.st_uid);
    // 所有者组id
    // printf("%d ",file_stat.st_gid);
    // 需要根据所有者和所有者组ID来打印所有者名字和所有者组的名字  结构体哦
    // 用户名
    U_name = getpwuid(file_stat.st_uid);
    printf("%s ", U_name->pw_name);

    // 用户所属组
    g_name = getgrgid(file_stat.st_gid);
    printf("%s ", g_name->gr_name);
    // 文件大小
    printf("%d ", (int)file_stat.st_size);

    // 最后状态更改时间
    struct tm *local_time = localtime(&file_stat.st_ctime);
    printf("%d月 ", local_time->tm_mon + 1);
    printf("%d ", local_time->tm_mday);
    printf("%d:%02d:%02d ", local_time->tm_hour, local_time->tm_min, local_time->tm_sec);
    printf("%s\n", entry->d_name);
  }

  return 0;
}
